#include "key.h"
#include "lv_task_test.h"

#define		KEY_NUM		3


//���尴����ǰ״̬�������
static uint8_t key_state[KEY_NUM]={0,0,0}; 

//������ʼ������,��Ҫ��(�˿ڳ�ʼ��)
void KEY_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
	//����GPIO�˿ڵ�ʱ��
	RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK|KEY3_GPIO_CLK,ENABLE); 

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;            //��������ģʽ(���ƽ���ⲿ����)
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //50M(��������Ч)
	
	 
    GPIO_InitStructure.GPIO_Pin =KEY1_GPIO_PIN;  //ѡ������GPIO����
    GPIO_Init(KEY1_GPIO_PORT,&GPIO_InitStructure);//
	
	GPIO_InitStructure.GPIO_Pin =KEY2_GPIO_PIN;  //ѡ������GPIO����
    GPIO_Init(KEY2_GPIO_PORT,&GPIO_InitStructure);//

	GPIO_InitStructure.GPIO_Pin =KEY3_GPIO_PIN;  //ѡ������GPIO����
    GPIO_Init(KEY3_GPIO_PORT,&GPIO_InitStructure);//
}

//������������(�ɰ���ǰ���״̬���жϰ����Ƿ��»���)
//���ɴ˵�����Ӧ�ĺ���
//����main�����е���
void KeyDriver(void)
{
	static	uint8_t key_state_buff[KEY_NUM]={0,0,0};
	uint8_t i;
	
	for(i=0;i<KEY_NUM;++i)
	{
		if(key_state_buff[i]!=key_state[i])   //���������»���(ִֻ�б仯ʱ��ֵ)
		{
			//���ݰ�����״̬
			key_state_buff[i]=key_state[i];
			if(key_state[i]==0)  //��������
			{
				//����KeyAction����
				KeyAction(i+1);
			}
		}
	}
}

//����ɨ�躯��
//ͨ�������˲������µ�ǰ�İ���״̬
void KEY_Scan(void)
{
	static uint8_t key_buffer[KEY_NUM]={0x00,0x00,0x00};   //�����˲�������
	uint8_t i=0;
	
	key_buffer[0]=(key_buffer[0]<<1)|((uint8_t)KEY1_STATE());            //
	key_buffer[1]=(key_buffer[1]<<1)|((uint8_t)KEY2_STATE());            //
	key_buffer[2]=(key_buffer[2]<<1)|((uint8_t)KEY3_STATE());            //

	for(i=0;i<KEY_NUM;++i)
	{
		if(key_buffer[i]==0x00)
		{
			key_state[i]=0;   //δ������
		}
		else if(key_buffer[i]==0xFF)
		{
			key_state[i]=1;   //������
		}
	}
}

//�����Ǽٶ���������ʱΪ�ߵ�ƽ���ɿ�ʱΪ�͵�ƽ


















